package com.xbaoziplus.simple_spring.beans.factory;

import com.xbaoziplus.simple_spring.beans.BeansException;

/**
 * @author xbaozi
 * @version 1.0
 * @interfacename BeanFactory
 * @date 2023-04-17  18:45
 * @description Bean工厂接口
 */
public interface BeanFactory {

    /**
     * @description 返回指定 bean 的一个实例
     * @author xbaozi
     * @date 2023/4/17 18:47
     * @param name  要检索的 bean 的名称
     **/
    public Object getBean(String name) throws BeansException;

    /**
     * @description 返回指定 bean 的一个实例，允许指定显式构造函数参数/工厂方法参数
     * @author xbaozi
     * @date 2023/4/20 19:54
     * @param name  要检索的 bean 的名称
     * @param args  用显式参数创建 bean 实例时使用的参数
     **/
    public Object getBean(String name, Object... args) throws BeansException;

    /**
     * @description 返回指定 bean 的一个实例，允许指定显式构造函数参数/工厂方法参数
     * @author xbaozi
     * @date 2023/5/8 15:02
     * @param name  要检索的 bean 的名称
     * @param requiredType  用显式参数创建 bean 实例时使用的参数
     * @return T
     **/
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
}
